{#control-flow}
کنترل گردش
برنامههایی که تا به حال مینوشتیم، یک مجموعهی از فراخوانیها بود که توسط پایتون به صورت مرتب از بالا به پایین اجرا میشدند. حال اگر بخواهید گردش را تغییر بدهید باید چه کرد؟ برای مثال اگر بخواهید برنامه کارهای مختلفی در موقعیتهای مختلف را انجام دهد. همانند چاپ در زمانهای مختلف روز 'شببخیر' و 'صبحبخیر' .
همان طور که شما حدس زدید این کنترل گردش است. در پایتون با سه روش میتوان این کار را انجام داد: دستورات - if, for و while
دستور if
دستور if برای بررسی شرط استفاده میشود. if(اگر) شرط برقرار است بلوک اجرا میشود(بلوک if فراخوانی میشود). else(وگرنه) بلوک مربوط به وگرنه(بلوک else فراخوانی میشود) بررسی میشود. بند else اختیاری است.
برای مثال (فایل if.py را ذخیره کنید)
برای مشاهده برنامهها بهتر است به لینک زیر سر بزنید:
number = 23
guess = int(input('Enter an integer : '))
if guess == number:
    # New block starts here
    print('Congratulations, you guessed it.')
    print('(but you do not win any prizes!)')
    # New block ends here
elif guess < number:
    # Another block
    print('No, it is a little higher than that')
    # You can do whatever you want in a block ...
else:
    print('No, it is a little lower than that')
    # you must have guessed > number to reach here
print('Done')
# This last statement is always executed,
# after the if statement is executed.
خروجی:
$ python if.py
Enter an integer : 50
No, it is a little lower than that
Done
$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done
$ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done
چگونه و چطور
در این برنامه فرضیات کاربران را میگیریم و فرضیات را بررسی میکنیم. برای مثال ایا ورروی عدد است؟. حال متغییری با نام +number+ را با هر عدد صحیح که میخواهیم پر میکنیم. برای مثال عدد ۲۳ است. در گام بعدی در نظر میگیرم که کاربر از تابع input() که برای ورودی گرفتن است، استفاده میکند. این تابعهابرنامههای هستند که از چندین بخش برنامههای کوچک ساخته شدهاند. دربارهی این موضوع در  فصل تابعها بحث خواهیم کرد.
در گام رشته موجود را با استفاده از تابع input میگیریم که برروی صفحهای نمایش نشان داده میشود و منتظر گرفتن ورودی از کاربر میشود. وقتی که که ما چیزی را وارد میکنیم و دکمه [enter] کیبورد را فشار میدهیم تابع input() انچه که ما وارد کرده بودیم رابه صورت یک رشته برمیگرداند.بعد ما با استفاده از int ان را به عدد تبدیل میکنیم و ان را در متغییر برای کاربر فرض کردیم ذخیره میکنیم.در صورتکه که int  کلاس است ولی چیزی که شما ان را باید بدانید ان است که شما میتوانید برای تبدیل رشته به عدد استفاده کنید(اگر رشته در حد مجاز عدد داشته باشد).
در گام بعدی ما فرض کاربر را با عددی که ما در نظر گرفته بودیم را بررسی میکنیم. اگر این اعداد مساوی هستند چاپ میکنیم صحیح است. این نکته را در نظر بگیرید که ما از فاصلههاو تورفتگیها استفاده میکنیم برای انکه به پایتون بگویم که کدام یک از فراخوانیها مال کدام یک از بلوکها هستند. امیدوارم که تورفتگیها و فاصلهها("consistent indentation") را در اینده رعایت کنید.
توجه داشته باشید که دستور if در اخر داری دونقطه میباشدکه بعد از ان بلوک دستورات است(با تورفتگیها همچنین).
در گام بعدی بررسی میشود که اگر عدد گفته شده کمتر از عدد ما است به کاربر پیام میدهیم که باید عدد بالاتری را حدس برند.دستوری که ما در اینجا استفاده میکنیم elif است.که دو دستور را if else-if else با هم متصل میکند و به این صورت میشود if-elif-else.این روش برنامهنویسی و همچنین تعداد تورفتگی ها را کمتر میکند.
دستور elif و else همچنین باید داری دو نقطه باشند.
در دستور  if میتوان از if دیگر در داخل ان استفاده کرد به این روش ifهای تودرتو میگویند.
یاداوری قسمتها  elif و else ضروری نیست.if  تنها کوتاهترین روش است.
if True:
    print('Yes, it is true')
بعد از اینکه پایتون دستور if را همراه با بخشهای elif و else اجرا کرد، پایتون به بلوک بعدی میرود که در داخل if است. در اینجا بلوک اصلی است(جاییکه برنامه اجرا میشود). در ادامه دستور print و اتمام شرط استپایان.
با اینکه این برنامه یک برنامه ساده است، به نکتههای مهم اشاره کردم. چیزهای گفتنی گفته شد. همانطور که میبینید بسیار ساده است (اگر بخواهیم با پشت صحنهی سی و سیپلاس پلاس مقایسه کنیم). دراین گام باید مفهوم این موضوع را درک کنید. بعد از تمرین این موضوع برایتان این یک امر ساده میشود.
نکته برای برنامههای سی و سیپلاس پلاس
در پایتون دستور
switchنداریم. از دستورif..elif..elseمیتوانید برای انجام همان کارها نیز استفاده کنید. همچنین گاهی اوقات هم از ساختاردادهها برای انجام این کار استفاده میکنند.
دستور while
دستور while برای تکرار یک بلوک استفاده میشود، به شرط انکه شرطه گفته شده برقرار باشد. دستور while به نام looping(حلقه) همچنین مینامند. دستور while میتواند به صورت اختیاری قسمت else را داشته باشد.
برای مثال(فایلی با نام while.py ذخیره کنید)
برای مشاهده برنامهها بهتر است به لینک زیر سر بزنید:
number = 23
running = True
while running:
    guess = int(input('Enter an integer : '))
    if guess == number:
        print('Congratulations, you guessed it.')
        # this causes the while loop to stop
        running = False
    elif guess < number:
        print('No, it is a little higher than that.')
    else:
        print('No, it is a little lower than that.')
else:
    print('The while loop is over.')
    # Do anything else you want to do here
print('Done')
خروجی:
$ python while.py
Enter an integer : 50
No, it is a little lower than that.
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done
چگونه و چطوری
در این برنامههم ما بازی حدس بزن را بازی میکنیم ولی مزیتاش انیجاست که تا زمانی که درست حدس نزنید این مکان هست که ادامه بدهید. دیگر در اینجا نیاز نیست هر سری برنامه را برای حدس زدن اجرا کنیم(انچه که قبل انجام میدادیم).این به طور دقیق توانایی دستور while را نمایش میدهد.
ما دستورهای input و if را به داخل حلقهی while تغییر میدهیم و متغییر running برابر با True قبل از حلقهی while قرارمیدهیم.در اولین گام ما بررسی میکنیم که ایا متغییر running برابر است با True اگر درست است به بلوک حلقهی while میرویم.پس از انجام بلوک دوباره شرط بررسی میشود که در اینجا متغییر running است. اگر درست است که بلوک ااجرا میشود وگرنه بلوک else که اختیاری است اجرا میشود.بعد ان هم به فراخوانیها گفته شده میرود.
بلوک else زمانی اجرا میشود که داخل حلقه while برابر با False باشد.پس هر گاه شرط برقرار نباشد این بلوک اجرا میشود.این موضوع را هم در نظر داشته باشید که در حلقه while این شرط پشت سرم هم اجرا میشود مگر انکه با دستور break به ان خاتمه دهید.
به True و False نوع بولین میگویند و میتوان یک جورایی با 1 و 0 همسان دانست.
نکته برای برنامههای سی و سیپلاس پلاس
بخاطر داشته باشید که برای حلقهی
whileمیتوانید ازelseاستفاده کنید.
حلقه for
دستور for..in یک فراخوانی در حلقهها است که کار تکرار را انجام میدهد. ان هم به صورت ترتیبی این کار را انجام میدهد.ما جرییات بیشتر دربارهی sequences(ترتیب یا دنبالهها) در فصول بعدی خواهیم دید. شما باید این موضوع را درک کنید که دنبالهها فقط یک مجموعهی از دستورالعمل هستند.
مثال (فایلی با نام for.py ذخیره کنید)
for i in range(1, 5):
    print(i)
else:
    print('The for loop is over')
خروجی:
$ python for.py
1
2
3
4
The for loop is over
چگونه و چطوری
در این برنامه ما دنبالهی از اعداد را چاپ میکنیم. ما این دنباله را با استفاده از تابع range میسازیم.
کاری که ما اینجا انجام میدهیم باید دو عدد را در نظر بگیریم برای range یک عدد برای شروع دنباله و عدد دوم برای پایان دنباله.برای مثال (range(1,5 نتیجهی دنبالهاش  [1, 2, 3, 4] میشود.در حالت عادی گامهای range یکی یکی است. اگر بخواهیم این را تغییر بدهیم کافی عدد سومی را به range اضافه کنیم. برای مثال (range(1,5,2 نتیجهی دنبالهاش [1,3] میشود. این نکته را در نظر داشته باشید که range(دامنه) تا عدد دوم اضافه میشود.
این نکته را در نظر دشته باشید که ()range هر بار یک عدد را میسازد. اگر شما لیست کامل را میخواهید باید ()list را صدا بزنید. برای مثال ((list(range(5 که نتیجهاش [0, 1, 2, 3, 4] میشود.list در بخش  ساختار داده  توضیح داده میشود.
حلقهی for براساس این دامنه  (for i in range(1,5  که همانند [for i in [1, 2, 3, 4 این دامنه است این کار را انجام میدهد.بدان معنی که هر عدد هر بار به ترتیب به i اضافه میشود.سپس دوباره به تعداد مقدار i ،بلوک for اجرا میشود. در این برنامه ما فقط مقدار بلوک را چاپ میکنیم.
به یاد داشته باشید که بخش else اختیاری است. اگر شامل این بخش باشد، این بخش پس از یک بار اجرا شدن حلقهی for اجرا میشود به شرط انکه از << دستور ,break>> استفاده نشده باشد.
به یاد داشته باشید که حقلهی for..in برای هر دنبالهی کار میکند. در اینجا از range برای ساختن اعداد استفاده کردیم ولی میتوانیم برای روشهای دیگر نیز استفاده کنیم. در مورد این موضوع در فصول بعدی بحث خواهیم کرد.
نکته برای برنامههای سی ، سیپلاسپلاس، جاوا ، سی شارپ
حلقهی
forدر پایتون از ریشه با برنامه سی و سیپلاسپلاس تفاوت دارند. ولی برنامهنویسان سیشارپ به این نکته توجه کنند که حلقهیforپایتون شبیه حلقهیforeachسیشارپ است. برای برنامهنویسان جاوا هم همینطور است (حلقهیfor (int i : IntArray)در جاوا ۱.۵).در برنامهنوسی سی وسیپلاسپلاس اگر شما میخواستید همچین حلقهی
(++for (int i = 0; i < 5; iرا بنویسید در پایتون کافی است این دستور را(for i in range(0,5بنویسد. همانطور که میبینیدحلقهیforخیلی اسانتر وسادهتر شده است.همین موضوع باعث کمتر شدن خطا در پایتون میشود.
{#break-statement}
دستور break
دستور break برای قطع کردن حلقه و خارج شدن از حلقه استفاده میشود. حتی اگر در حلقه نتیجهاش  False نباشه ویا حلقه کامل اجرا نشده باشد، با این دستور از حلقه خارج میشوید.
توجه داشته باشید که اگر دستور break را در حلقههای for یا while استفاده میکنید دیگر بخش else اجــرا نـــخواهد شـــد.
برای مثال (فایلی با نام break.py ذخیره کنید)
while True:
    s = input('Enter something : ')
    if s == 'quit':
        break
    print('Length of the string is', len(s))
print('Done')
خروجی:
$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 11
Enter something : quit
Done
چگونه و چطوری
در این برنامه ما دوباره از کاربر ورودی میگیریم و طول ورودی را هر بار محاسبه میکنیم. اما شرطی قرار میدهیم که اگر ورودی کاربر 'quit' بود از برنامه خارج شود.اینکار با استفاده از دستور breaking  در حلقه انجام میشود.
اما طول رشته وروردی با استفاده از تابع len محاسبه میشود.
این نکته را هم به یاد داشته باشید که دستور break در حلقهی for قابله استفاده است.
Swaroop's : اشعار پایتون
Programming is fun
(برنامهنویسی یک سرگرمیه)
When the work is done
(وقتی کار تمومه)
if you wanna make your work also fun:
(اگر میخواهید کارتون رو تبدیل به سرگرمی کنید:)
    use Python!
(از پایتون استفاده کنید!)
{#continue-statement}
دستور continue
دستور continue در پایتون برای نادیده گرفتن شروط در بلوک مربوطه استفاده میشود و دستورات بعدی را continue را اجرا میکند.
برای مثال(فایلی با نام continue.py ذخیره کنید)
while True:
    s = input('Enter something : ')
    if s == 'quit':
        break
    if len(s) < 3:
        print('Too small')
        continue
    print('Input is of sufficient length')
    # Do other kinds of processing here...
خروجی:
$ python continue.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit
چگونه و چطوری
در این برنامه از ورودی کابر استفاده میکنیم. اما شرطی دارد ان هم که اگر رشتهی وروری کمتر ۳ کلمه طول داشته باشد و با استفاده از دستور len طول رشته را به دست میاوریم و اگر طول رشته کمتر سه تا بود ان موقع ما بلوک بعدی  continue را نادیده میگیریم. در غیر این صورت دستور بلوک را ادامه میدهیم و عملیات مربوط ان بلوک را انجام میدهیم.
این نکته را هم در نظر داشته باشید که دستور continue در حلقه for نیز میتوان استفاده کرد.
خلاصه
ما دیدیم که چگونه از سه دستور if، while و for همچنین break و continue استفاده کنیم. این یکی از بخشهای که خیلی در پایتون استفاده میشود و این موضوع باعث میشود برنامهها کمی راحتترکارکنند.
در فصول بعدی خواهیم دید که چگونه از تابعها استفاده کنیم.